# -*- coding: utf-8-sig -*-
# Create your views here.
from django.http import *
from django.shortcuts import render_to_response
from django.template import *
from atletas.models import *
from django.contrib import messages
from django.forms.models import modelformset_factory
from grids import *
from django.contrib.auth.decorators import login_required

# Se importan los modelos para la BD
from core.models import Deporte, Atleta
from core.XMLParser import *

################################################################################

# Inicio atletas
@login_required
def index(request):
    #filtrar todos los atletas en activo
    return render_to_response('atletas/index.html',{'user_logged_in':request.user.is_authenticated()},
        context_instance=RequestContext(request))

################################################################################

@login_required
# Ver atletas
def verAtleta(request, atleta_id=None):
    atleta = Atleta.objects.get(id=atleta_id) if atleta_id != None else None
    if atleta==None:
        return HttpResponseRedirect('../../') # Redirect after POST
    
    url_foto = atleta.url_foto
    if url_foto == '':
        url_foto= 'atletas/default.png'
    
    # Inicia datos de prueba
    #evento = Evento.objects.get(pk=2)
    #a = evento.xml.encode('utf-8')
    #lista = xml_parser(a)
    #print lista
    #print '_*_*_*_*_*_*_*_'
    # Termina datos de prueba
    
    return render_to_response('atletas/ver.html',{'atleta':atleta,
        'url_foto':url_foto,
        # dato de prueba
        #'evento':lista,
        # termina dato de prueba
        'user_logged_in':request.user.is_authenticated()
            },context_instance=RequestContext(request))
    
################################################################################

@login_required
# Editar atletas
def editarAtleta(request, atleta_id=None):
    
    atleta = Atleta.objects.get(id=atleta_id) if atleta_id != None else None
    entrenadores = Entrenador.objects.all()
    
    url_foto = 'atletas/default.png'
    if atleta != None:
        url_foto= atleta.url_foto
    
    prefix = '../' if atleta_id != None else ''
    if request.method == 'POST': # If the form has been submitted...
        # A form bound to the POST data
        form = FormularioAtletas(request.POST, request.FILES, instance = atleta) if atleta_id != None else FormularioAtletas(request.POST,request.FILES)
        
        if 'boton_federar' in request.POST:
            return HttpResponseRedirect(prefix + '../federar/'+str(atleta.pk)) # Redirect after POST
        
        if 'boton_cancelar' in request.POST:
            return HttpResponseRedirect(prefix + '..') # Redirect after POST
        
        if form.is_valid(): # All validation rules pass
            atleta = form.save(commit = False)
            
            if atleta_id != None:
                atleta.entrenadores.clear()
            
            lista_entrenadores = request.POST.getlist('entrenadores[]')
            for b in lista_entrenadores:
                atleta.entrenadores.add(Entrenador.objects.get(pk=int(b)))
            
            if 'file' in request.FILES:
                atleta.set_foto(request.FILES['file'])
            else:
                atleta.set_foto(url_nueva=url_foto)
            atleta.save()
        
            if 'boton_guardar' in request.POST:
                messages.success(request, "Atleta '%s' guardado exitosamente." % form.cleaned_data['nombres'])
                return HttpResponseRedirect(prefix + '..') # Redirect after POST
                
            elif 'boton_guardar_y_otro' in request.POST:
                messages.success(request, "Atleta '%s' guardado exitosamente." % form.cleaned_data['nombres'])
                return HttpResponseRedirect(prefix + '../crear/') # Redirect after POST
                
            elif 'boton_guardar_y_editar' in request.POST:
                messages.success(request, "Atleta '%s' guardado exitosamente." % atleta.nombres)
                return HttpResponseRedirect(prefix + '../editar/'+str(atleta.pk)+'/') # Redirect after POST
        
    else:
        form = FormularioAtletas(instance=atleta) if atleta_id != None else FormularioAtletas()# A form bound to the POST data

    return render_to_response('atletas/editar.html',
    {'form':form, 'url_foto':url_foto, 'atleta':atleta, 'entrenadores':entrenadores, 'user_logged_in':request.user.is_authenticated()},
    context_instance=RequestContext(request))

################################################################################

@login_required
def atletas_activos_grid_handler(request):
    # handles pagination, sorting and searching
    grid = AtletasActivosGrid()
    return HttpResponse(grid.get_json(request), mimetype="application/json")

@login_required
def atletas_activos_grid_config(request):
    # build a config suitable to pass to jqgrid constructor   
    grid = AtletasActivosGrid()
    return HttpResponse(grid.get_config(), mimetype="application/json")

@login_required
def atletas_grid_handler(request):
    # handles pagination, sorting and searching
    grid = AtletasGrid()
    return HttpResponse(grid.get_json(request), mimetype="application/json")

@login_required
def atletas_grid_config(request):
    # build a config suitable to pass to jqgrid constructor   
    grid = AtletasGrid()
    return HttpResponse(grid.get_config(), mimetype="application/json")

################################################################################

@login_required
# Federar atletas
def federarAtleta(request, atleta_id=None):
    
    atleta = Atleta.objects.get(id=atleta_id) if atleta_id != None else None
    
    if atleta_id==None:
        return HttpResponseRedirect('../..')
    
    #atleta
    lista = Deporte.getAllObjects()
    dict = Atleta.attr_dict()
    
    for dep in lista:
        if Deporte.objects.get(pk=dep.pk) in atleta.deportes.all():
            dep.checked = 'yes'
            dep.datos_requeridos = []
        else:
            lista_datos = []
            for dato in dep.datos_requeridos:
                print 'Dato:',dato
                nombre_campo = dict[dato]
                if eval('type(atleta.'+nombre_campo+')')==type(0L):
                    agregar = eval('atleta.'+nombre_campo+'==0')
                elif eval('type(atleta.'+nombre_campo+')')==type(datetime.date(1990,11,10)):
                    agregar = False
                else:
                    agregar = eval('len(atleta.'+nombre_campo+')==0')
                if agregar:
                    lista_datos.append(dato)
            dep.datos_requeridos = lista_datos
    
    if request.method == 'POST': # If the form has been submitted...
        
        if 'boton_editar_atleta' in request.POST:
            return HttpResponseRedirect('../../editar/'+str(atleta.pk)) # Redirect after POST
        elif 'boton_cancelar' in request.POST:
            return HttpResponseRedirect('../..') # Redirect after POST
        
        #guardar los deportes que seleccionó
        atleta.deportes.clear()
        lista_deportes_asociados = request.POST.getlist('deportes[]')
        for b in lista_deportes_asociados:
            dep = Deporte.objects.get(pk=int(b))
            atleta.deportes.add(dep)
            messages.success(request,"Atleta '"+atleta.nombres+"' federado a '"+dep.nombre+"'")
        atleta.save()
        
        
        if 'boton_guardar' in request.POST:
            return HttpResponseRedirect('../..') # Redirect after POST        
        elif 'boton_guardar_y_editar' in request.POST:
            return HttpResponseRedirect('../../federar/'+str(atleta.pk)+'/') # Redirect after POST
        
    
    return render_to_response('atletas/federar.html',
        {'atleta':atleta, 'deportes':lista, 'user_logged_in':request.user.is_authenticated()},
        #{'form':form,'url_foto':url_foto},
        context_instance=RequestContext(request))
    
################################################################################

# Inicio atletas
@login_required
def todos(request):
    return render_to_response('atletas/index.html',
        {'todos': True, 'user_logged_in':request.user.is_authenticated()},
        context_instance=RequestContext(request))
